import { ref, unref } from 'vue';

export function useLockFn<P extends any[] = any[], V = any>(fn: (...args: P) => Promise<V>) {
   const lockRef = ref(false);
   return async function (...args: P) {
      if (unref(lockRef)) return;
      lockRef.value = true;
      try {
         const ret = await fn(...args);
         lockRef.value = false;
         return ret;
      } catch (e) {
         lockRef.value = false;
         throw e;
      }
   };
}
